708d11f54a62946c35459c6c004d14b61fb54917,modules/transport-netty4/src/main/java/org/elasticsearch/http/netty4/Netty4HttpChannel.java,Netty4HttpChannel,sendResponse,#RestResponse#,93
Before Change
}
if (pipelinedRequest != null) {
channel.writeAndFlush(pipelinedRequest.createHttpResponse(resp, promise));
} else {
channel.writeAndFlush(resp, promise);
}
After Change
ByteBuf buffer = Netty4Utils.toByteBuf(response.content());
final FullHttpResponse resp;
if (HttpMethod.HEAD.equals(nettyRequest.method())) {
resp = newResponse(Unpooled.EMPTY_BUFFER);
} else {
resp = newResponse(buffer);
}
resp.setStatus(getStatus(response.status()));
Netty4CorsHandler.setCorsResponseHeaders(nettyRequest, resp, transport.getCorsConfig());
String opaque = nettyRequest.headers().get("X-Opaque-Id");
if (opaque != null) {
setHeaderField(resp, "X-Opaque-Id", opaque);
}
// Add all custom headers
addCustomHeaders(resp, response.getHeaders());
addCustomHeaders(resp, threadContext.getResponseHeaders());
BytesReference content = response.content();
boolean release = content instanceof Releasable;
try {
// If our response doesn't specify a content-type header, set one
setHeaderField(resp, HttpHeaderNames.CONTENT_TYPE.toString(), response.contentType(), false);
// If our response has no content-length, calculate and set one
setHeaderField(resp, HttpHeaderNames.CONTENT_LENGTH.toString(), String.valueOf(buffer.readableBytes()), false);
addCookies(resp);
final ChannelPromise promise = channel.newPromise();
if (release) {
promise.addListener(f -> ((Releasable)content).close());
}
if (isCloseConnection()) {
promise.addListener(ChannelFutureListener.CLOSE);
}
final Object msg;
if (pipelinedRequest != null) {
msg = pipelinedRequest.createHttpResponse(resp);
} else {
msg = resp;
}